/*
 * JugadorThreadEnvio.cpp
 *
 *  Created on: 14/06/2014
 *      Author: javier
 */

#include "JugadorThreadEnvio.h"
#include "ProtocoloServidor.h"
#include "Partida.h"
#include <iostream>
#include "ServerSocket.h"

JugadorThreadEnvio::JugadorThreadEnvio(Mutex * mutex, int socketFD) {
	this->sockfd = socketFD;
	this->mutex = mutex;
	partida = NULL;
	jugadorConectado = NULL;
}

JugadorThreadEnvio::~JugadorThreadEnvio() {

}

void JugadorThreadEnvio::run() {
	while (isRunning()) {
		try {
			// Comienza la conversacion para el envio de eventos nuevos
			Message m = queue.pop2();
			if (m.code == TERMINATE) {
				stop();
				break;
			}
			ProtocoloServidor::send_requestForUpdates(this->sockfd,
					m.toString());
		} catch (ComunicacionException &e) {
			std::cout << "Error en el envio de una actualizacion al cliente"
					<< std::endl;
		}
	}
}

void JugadorThreadEnvio::enqueueEventMessage(Message m) {
	queue.push(m);
}

void JugadorThreadEnvio::setPartida(Partida* partida) {
	this->partida = partida;
}

void JugadorThreadEnvio::setJugadorConectado(
		JugadorConectado* jugadorConectado) {
	this->jugadorConectado = jugadorConectado;
}

void JugadorThreadEnvio::closeConnections() {
	ServerSocket::shutdownConexion(sockfd);
	ServerSocket::matarConexion(sockfd);
}
